home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 2 / United Public Domain Gold 2.iso / education / pe019.dms / pe019.adf / whip / whip.amosSourceCode < prev   
AMOS Source Code  |  1991-03-25  |  23KB  |  1,106 lines

  1. '
  2. '                     ************************************************ 
  3. '                     **                                            ** 
  4. '                     **      DTP = Dunks Typing Programme          ** 
  5. '                     **        (C) 1992  Duncan Moran              ** 
  6. '                     **                                            ** 
  7. '                     ** This PD version may be freely distributed  ** 
  8. '                     **                                            ** 
  9. '                     **        Last amended 3/7/92                 ** 
  10. '                     **                                            ** 
  11. '                     ************************************************ 
  12. '
  13. Dim A$(80)
  14. Dim T$(80)
  15. Global A$(),T$(),EOT,CHCNT,GOOD,K$,K,S,LASPC,MK,SEF,STAR,TLN,PCNT,SCUP,LSEF,BC
  16. Global PSEL,SCRPOS,BEL,BSEL,PTX,PTY,PBX,PBY,XS,YS,XP,YP,LCNT,PAGE$,FRD,CHANGED
  17. Global CM,TZ,MUS,IC,STP,SA,TED,TP,TXP,Z$,LIX,LIY,SLIX,SLIY,TM$,TT,TLL,BEOH,T1,F$
  18. '
  19. '
  20. OFFWEGO
  21. PAGESELECT
  22. SETPAGE
  23. BUTTONSUP
  24. End 
  25. '
  26. '
  27. Procedure PAGESELECT
  28.    Unpack 11 To 5
  29.    Curs Off 
  30.    For N=300 To 200 Step -1
  31.       Screen Display 5,,N,,
  32.       If N/2=Int(N/2) Then Wait Vbl 
  33.    Next N
  34.    Screen 5
  35.    Reserve Zone 4
  36.    Limit Mouse 
  37.    Set Zone 1,145,222 To 190,280
  38.    Set Zone 2,210,222 To 258,280
  39.    Set Zone 3,286,212 To 332,279
  40.    Set Zone 4,353,212 To 398,279
  41.    Repeat 
  42.       SX=X Mouse
  43.       SY=Y Mouse
  44.       PSEL=Zone(5,SX,SY)
  45.    Until Mouse Click and PSEL>0
  46.    Screen 0 : Cls : Screen 1 : Cls 
  47.    For N=200 To 300
  48.       Screen Display 5,,N,,
  49.       Wait Vbl 
  50.       Mvolume(300-N)/1.75
  51.    Next N
  52.    LCNT=1
  53.    Music Off 
  54.    Reserve Zone 
  55.   Screen Close 5
  56. End Proc
  57. Procedure BUTTONSUP
  58.    Unpack 12 To 4
  59.    N=300
  60.    Screen Display 4,,N,,
  61.    Curs Off 
  62.    For N=300 To 250 Step -1
  63.       Screen Display 4,,N,,
  64.       If N/2=Int(N/2) Then Wait Vbl 
  65.    Next N
  66.    SCRPOS=250
  67.    SCRPOS=250
  68.    Reserve Zone 12
  69.    Set Zone 1,120,13 To 156,26
  70.    Set Zone 2,36,34 To 78,46
  71.    Set Zone 3,96,34 To 138,46
  72.    Set Zone 4,156,34 To 196,46
  73.    Set Zone 5,214,34 To 256,46
  74.    Set Zone 6,274,34 To 314,46
  75.    Set Zone 7,332,34 To 372,46
  76.    Set Zone 8,390,34 To 432,46
  77.    Set Zone 9,450,34 To 490,46
  78.    Set Zone 10,508,34 To 550,46
  79.    Set Zone 11,570,34 To 610,46
  80.    Set Zone 12,492,13 To 526,26
  81.    Limit Mouse 
  82.    Do 
  83.       Screen 4
  84.       Limit Mouse 
  85.       WHICHBUTTON
  86.    Loop 
  87. End Proc
  88. Procedure SETPAGE
  89.    On Menu Off 
  90.    Menu Off 
  91.    Screen 1 : Clip 
  92.    Screen 0
  93.    Limit Mouse 
  94.    Clip 
  95.    Curs Off 
  96.    Ink 0
  97.    TLL=620
  98.    If PSEL=1 Then Box 5,5 To 635,250 : Clip 1,1 To 2,2 : LIY=25 : TLN=10 : PTX=1 : PTY=1 : PBX=2 : PBY=2
  99.    If PSEL=2 Then Box 5,5 To 305,250 : Box 315,5 To 635,250 : Clip 315,5 To 635,250 : PTX=315 : PTY=5 : PBX=635 : PBY=250 : LIY=25 : TLN=10 : TLL=275
  100.    If PSEL=3 Then Box 5,5 To 635,135 : Box 5,150 To 635,250 : Clip 5,5 To 635,135 : PTX=5 : PTY=5 : PBX=635 : PBY=135 : LIY=168 : TLN=4
  101.    If PSEL=4 Then Box 5,5 To 635,220 : Box 5,225 To 635,250 : Clip 5,5 To 635,220 : PTX=5 : PTY=5 : PBX=635 : PBY=230 : LIY=245 : TLN=1
  102.    LIX=16
  103.    SLIX=LIX : SLIY=LIY
  104.    If LCNT>1
  105.       For N=1 To LCNT-1
  106.          LIY=LIY+24
  107.       Next N
  108.    End If 
  109.    Screen Copy 0 To 1
  110.    Menu On 
  111.    On Menu On 
  112. End Proc
  113. Procedure WHICHBUTTON
  114.    On Menu On 
  115.    MESS["Please select a tool or menu item."]
  116.    INITIN
  117.    BSEL=TZ
  118.    MESS[Space$(36)]
  119.    If BSEL<>8
  120.       Screen Copy 0 To 1
  121.    End If 
  122.    On BSEL Proc MOVSC,SQ,CIRC,TRIANG,LINER,FHAND,DROP,UNDO,FIL,WIPER,DUN,MOVSC
  123. End Proc
  124. Procedure DROPBUT
  125. End Proc
  126. Procedure FIL
  127.    MESS["Click in the area to be filled"]
  128.    INITIN
  129.    If TZ=7 Then Pop Proc
  130.    MESS[Space$(36)]
  131.    MESS["Hang on a mo......."]
  132.    Screen 0
  133.    Ink IC : Set Pattern STP
  134.    Paint XS,YS,0
  135.    MESS[Space$(36)]
  136.    On Menu On 
  137. End Proc
  138. Procedure SQ
  139.    MESS["Click on a corner"]
  140.    INITIN
  141.    If TZ=7 Then Pop Proc
  142.    MESS[Space$(36)]
  143.    MESS["Click on the opposite corner"]
  144.    Screen 0
  145.    Gr Writing 2
  146.    Do 
  147.       Ink 8
  148.       XP=X Screen(X Mouse)
  149.       YP=Y Screen(Y Mouse)
  150.       Box XS,YS To XP,YP
  151.       Ink 1
  152.       Box XS,YS To XP,YP
  153.       Exit If Mouse Click
  154.    Loop 
  155.    Gr Writing 1
  156.    Ink IC
  157.    Box XS,YS To XP,YP
  158.    MESS[Space$(36)]
  159. End Proc
  160. Procedure CIRC
  161.    MESS["Click on the centre spot"]
  162.    INITIN
  163.    If TZ=7 Then Pop Proc
  164.    MESS[Space$(36)]
  165.    MESS["Click when you have the right size"]
  166.    Screen 0
  167.    Gr Writing 2
  168.    Do 
  169.       Ink 8
  170.       XP=X Screen(X Mouse)
  171.       YP=Y Screen(Y Mouse)
  172.       R1=XP-XS : R2=YP-YS
  173.       R1=Abs(R1) : R2=Abs(R2)
  174.       If R1=0 Then R1=1
  175.       If R2=0 Then R2=1
  176.       Ellipse XS,YS,R1,R2
  177.       Exit If Mouse Click
  178.       Ink 1
  179.       Ellipse XS,YS,R1,R2
  180.       Exit If Mouse Click
  181.    Loop 
  182.    Gr Writing 1
  183.    Ink IC
  184.    Ellipse XS,YS,R1,R2
  185.    MESS[Space$(36)]
  186. End Proc
  187. Procedure TRIANG
  188.    MESS["Click on first corner"]
  189.    INITIN
  190.    If TZ=7 Then Pop Proc
  191.    X1=XS : Y1=YS
  192.    For N=1 To 2
  193.       MESS[Space$(36)]
  194.       MESS["Click on the next corner"]
  195.       Screen 0
  196.       Gr Writing 2
  197.       Do 
  198.          Ink 8
  199.          XP=X Screen(X Mouse) : X2=XP
  200.          YP=Y Screen(Y Mouse) : Y2=YP
  201.          Draw XS,YS To XP,YP
  202.          Ink 1
  203.          Draw XS,YS To XP,YP
  204.          Exit If Mouse Click
  205.       Loop 
  206.       Gr Writing 1
  207.       Ink IC
  208.       Draw XS,YS To XP,YP
  209.       XS=XP : YS=YP
  210.    Next N
  211.    Draw XP,YP To X1,Y1
  212.    MESS[Space$(36)]
  213. End Proc
  214. Procedure LINER
  215.    MESS["Click on the start point"]
  216.    INITIN
  217.    If TZ=7 Then Pop Proc
  218.    MESS[Space$(36)]
  219.    MESS["Click on the end point"]
  220.    Screen 0
  221.    Gr Writing 2
  222.    Do 
  223.       Ink 8
  224.       XP=X Screen(X Mouse)
  225.       YP=Y Screen(Y Mouse)
  226.       Draw XS,YS To XP,YP
  227.       Ink 1
  228.       Draw XS,YS To XP,YP
  229.       Exit If Mouse Click
  230.    Loop 
  231.    Gr Writing 1
  232.    Ink IC
  233.    Draw XS,YS To XP,YP
  234.    MESS[Space$(36)]
  235. End Proc
  236. Procedure FHAND
  237.    MESS["Press mouse key to draw "]
  238.    INITIN
  239.    If TZ=7 Then Pop Proc
  240.    MESS[Space$(36)]
  241.    MESS["Release when you have finished"]
  242.    Screen 0
  243.    Ink IC
  244.    While Mouse Key>0
  245.       XP=X Screen(X Mouse)
  246.       YP=Y Screen(Y Mouse)
  247.       Draw XS,YS To XP,YP
  248.       Wait Vbl 
  249.       XS=XP : YS=YP
  250.    Wend 
  251.    MESS[Space$(36)]
  252. End Proc
  253. Procedure DROP
  254.    MESS[Space$(36)]
  255. End Proc
  256. Procedure UNDO
  257.    Screen Copy 1 To 0
  258. End Proc
  259. Procedure WIPER
  260.    Screen 0
  261.    Cls 1,PTX,PTY To PBX,PBY
  262.    Ink 0
  263.    Box PTX,PTY To PBX,PBY
  264. End Proc
  265. Procedure FOURD
  266.    MESS[Space$(36)]
  267.    MESS["See you later!"]
  268.    For N=SCRPOS To 300
  269.       Screen Display 4,,N,,
  270.       If N/2=Int(N/2) Then Wait Vbl 
  271.    Next N
  272.    Wait Vbl 
  273. End Proc
  274. Procedure MOVSC
  275.    Volume 15
  276.    If BSEL=1
  277.       If MUS=1
  278.          MESS["   Going up ...."]
  279.       Else 
  280.          MESS["   Going up.....quietly"]
  281.       End If 
  282.    End If 
  283.    If BSEL=12
  284.       If MUS=1
  285.          MESS["  Going down ..."]
  286.       Else 
  287.          MESS["  Going down ... quietly"]
  288.       End If 
  289.    End If 
  290.    While Mouse Key
  291.       If BSEL=1 and SCRPOS>36 Then Dec SCRPOS
  292.       If BSEL=1 and SCRPOS=36 Then MESS["Roof garden and swimming pool"]
  293.       If BSEL=12 and SCRPOS<250 Then Inc SCRPOS
  294.       If BSEL=12 and SCRPOS=250 Then MESS["Rock bottom - send donations now!"]
  295.       Screen Display 4,,SCRPOS,,
  296.       If MUS=1 Then Bell 83-(SCRPOS/3.2)
  297.       Wait Vbl 
  298.    Wend 
  299.    MESS[Space$(36)]
  300.    Volume 20
  301. End Proc
  302. Procedure DUMMY
  303. End Proc
  304. Procedure MESS[M$]
  305.    Screen 4
  306.    Pen 3 : Paper 6
  307.    Locate 24,2
  308.    Print M$
  309. End Proc
  310. Procedure INITIN
  311.    Screen 0
  312.    Limit Mouse 
  313.    Repeat 
  314.       SCEN=Scin(X Mouse,Y Mouse)
  315.       If SCEN=4 and CM=2 Then Change Mouse 1 : CM=1 : If MUS=1 Then Sam Play 1
  316.       If SCEN=0 and CM=1 Then Change Mouse 2 : CM=2 : If MUS=1 Then Sam Play 2
  317.       If Y Mouse<45 and CM=2 and SCEN=0 Then Change Mouse 1 : CM=1 : If MUS=1 Then Sam Play 3
  318.       Screen SCEN
  319.       XS=X Screen(X Mouse)
  320.       YS=Y Screen(Y Mouse)
  321.       TZ=Zone(SCEN,XS,YS)
  322.       MK=Mouse Key
  323.    Until Mouse Click
  324.    If MUS=1 Then Sam Play 3
  325. End Proc
  326. Procedure EXT
  327.    If Choice(2)=1
  328.       Parent 
  329.       Edit 
  330.    End If 
  331. End Proc
  332. Procedure DING
  333.    If MUS=0 Then Goto HERE
  334.    D=(Dreg(0)*20)+2000
  335.    DD=(Dreg(1)*30)+2000
  336.    SR=(D+DD*3) : If SA>1 Then SR=SR/2 : If SA=2 Then SR=SR*1.5
  337.    Sam Play 15,SA,SR
  338.    HERE:
  339. End Proc
  340. Procedure MUS
  341.    Change Mouse 1
  342.    If Choice(2)=1 Then MUS=0
  343.    If Choice(2)=2
  344.       MUS=1
  345.       SA=Choice(3)
  346.    End If 
  347.    On Menu On 
  348. End Proc
  349. Procedure CUL
  350.    Change Mouse 1
  351.    IC=Choice(2)
  352.    Dec IC
  353.    Ink IC
  354.    On Menu On 
  355. End Proc
  356. Procedure FL
  357.    Change Mouse 1
  358.    If Choice(2)=1
  359.       STP=0
  360.    Else 
  361.       STP=(Choice(2)+3)
  362.    End If 
  363.    On Menu On 
  364. End Proc
  365. Procedure ED
  366.    Change Mouse 1
  367.    '  FOURD 
  368.    'Load Iff "texbr.iff",5
  369.    'Spack 5 To 13 
  370.    'Stop  
  371.    Unpack 13 To 5
  372.    Screen 5
  373.    Get Palette 5
  374.    Screen Display 5,,300,,
  375.    For N=300 To 175 Step -1
  376.       Screen Display 5,,N,,
  377.       Wait Vbl 
  378.    Next N
  379.    If SEF<>LSEF
  380.       CLTEX
  381.    End If 
  382.    UPLINE
  383.    '   Do 
  384.    '      Screen 5
  385.    '      X=X Screen(X Mouse) 
  386.    '      Y=Y Screen(Y Mouse) 
  387.    '      Repeat : Until Mouse Click
  388.    '      Screen 0
  389.    '      Print X;" ";Y 
  390.    '  Loop  
  391.    On Menu Off 
  392.    Menu Off 
  393.    TED=1
  394.    BEOH=10
  395. End Proc
  396. Procedure PGE
  397.    Change Mouse 1
  398.    If Choice(2) Then PAGESELECT : SETPAGE
  399.    On Menu On 
  400. End Proc
  401. Procedure EX
  402.    LSEF=SEF
  403.    SEF=(Choice(2)+2)
  404.    STAR=15
  405.    If PSEL<>2
  406.       If SEF=6 or SEF=9
  407.          STAR=2
  408.       End If 
  409.    End If 
  410.    On Menu On 
  411. End Proc
  412. Procedure EDBUTDOWN
  413.    Wait Vbl 
  414.    If Not SCUP
  415.       Screen Display 5,,300,,
  416.       For N=175 To 300
  417.          Screen Display 5,,N,,
  418.          If N/2=Int(N/2)
  419.             Wait Vbl 
  420.          End If 
  421.       Next N
  422.       Wait Vbl 
  423.    Else 
  424.       Wait Vbl 
  425.       MOVTXSCD
  426.       Wait Vbl 
  427.       For N=175 To 300
  428.          Screen Display 5,,N,,
  429.          If N/2=Int(N/2)
  430.             Wait Vbl 
  431.          End If 
  432.       Next N
  433.       Wait Vbl 
  434.    End If 
  435.    Screen Close 5
  436.    If FRD Then FOURUP
  437.    Screen 4
  438.    Limit Mouse 
  439. End Proc
  440. Procedure TEX
  441.    SETUP
  442.    Do 
  443.       If CHCNT>EOT Then EOT=CHCNT
  444.       '      Screen 0
  445.       '  Cls 
  446.       '     Home : Cline : Home  
  447.       '    Print "SEF:";SEF
  448.       '   Print "chcnt:";CHCNT 
  449.       '   Print "TT:";TT 
  450.       '  Print "TLL";TLL 
  451.       '   Print "K:";K 
  452.       '   Print "GOOD:";GOOD 
  453.       '    Print "EOT:";EOT
  454.       '    Print "laspc:";LASPC
  455.       'Screen 5
  456.       GRABAKEY
  457.       CHECKAKEY
  458.       PLOPIT
  459.       Exit If TED=0
  460.    Loop 
  461.    Menu On 
  462.    On Menu On 
  463.    KLIPPERG
  464.    Curs Off 
  465.    MESS[Space$(36)]
  466.    MESS["Click left button to continue"]
  467.    Ink IC
  468. End Proc
  469. Procedure GRABAKEY
  470.    TZ=0 : MK=0 : K=0 : S=0
  471.    Clear Key 
  472.    Repeat 
  473.       K$=Inkey$
  474.       K=Asc(K$)
  475.       S=Scancode
  476.       TZ=Zone(X Screen(X Mouse),Y Screen(Y Mouse))
  477.       MK=Mouse Click
  478.    Until K$<>"" or MK<>0
  479. End Proc
  480. Procedure CHECKAKEY
  481.    If K>$1F and K<$7F
  482.       GOOD=-1
  483.    Else 
  484.       GOOD=0
  485.       If TZ>0 and MK<>0
  486.          If TZ=1
  487.             K=27
  488.          End If 
  489.          If TZ=2
  490.             K=8
  491.          End If 
  492.          If TZ=3
  493.             S=70
  494.          End If 
  495.          If TZ=4
  496.             PASTE
  497.          End If 
  498.          If TZ=5
  499.             WIPER
  500.             Screen 5
  501.             LIX=SLIX : LIY=SLIY
  502.             LCNT=1 : UPLINE
  503.          End If 
  504.          If TZ=6
  505.             If LCNT<TLN
  506.                Inc LCNT
  507.                UPLINE
  508.                LIY=LIY+24
  509.             End If 
  510.          End If 
  511.          If TZ=7
  512.             If LCNT>1
  513.                Dec LCNT
  514.                DWNLINE
  515.                LIY=LIY-24
  516.             End If 
  517.          End If 
  518.          If TZ=8
  519.             K=30
  520.          End If 
  521.          If TZ=9
  522.             K=29
  523.          End If 
  524.          If TZ=10
  525.             K=28
  526.          End If 
  527.          If TZ=11
  528.             K=13
  529.          End If 
  530.          If TZ=12
  531.             If Not SCUP
  532.                MOVTXSC
  533.             Else 
  534.                MOVTXSCD
  535.             End If 
  536.          End If 
  537.       End If 
  538.       If K=8 and CHCNT>1
  539.          TEXL[" "] : TT=TT+T1
  540.          Cleft : Print " "; : A$(CHCNT)=" " : Cleft : Dec CHCNT
  541.       End If 
  542.       If K=29 and CHCNT>1
  543.          Cleft : Dec CHCNT
  544.       End If 
  545.       If K=28 and CHCNT<EOT
  546.          Cright : Inc CHCNT
  547.       End If 
  548.       If K=30
  549.          INSY
  550.       End If 
  551.       If S=70
  552.          DELI
  553.       End If 
  554.       If K=27
  555.          EDBUTDOWN
  556.          TED=0
  557.       End If 
  558.       If K=13
  559.          CLTEX
  560.       End If 
  561.    End If 
  562. End Proc
  563. Procedure DELI
  564.    TEXL[A$(CHCNT)]
  565.    TT=TT-T1
  566.    For N=CHCNT To EOT
  567.       A$(N)=A$(N+1)
  568.    Next N
  569.    A$(EOT+1)=" "
  570.    Curs Off 
  571.    Locate STAR,6
  572.    For N=1 To EOT
  573.       Print A$(N);
  574.    Next N
  575.    Dec EOT
  576.    Locate STAR+CHCNT-1,6
  577.    Curs On 
  578. End Proc
  579. Procedure INSY
  580.    TEXL[" "]
  581.    TT=TT+T1
  582.    Inc EOT
  583.    For N=1 To EOT : T$(N)=A$(N) : Next N
  584.    A$(CHCNT)=" "
  585.    For N=CHCNT To EOT
  586.       X$=T$(N)
  587.       A$(N+1)=X$
  588.    Next N
  589.    Curs Off 
  590.    Locate STAR,6
  591.    For N=1 To EOT
  592.       Print A$(N);
  593.    Next N
  594.    Curs On 
  595.    Locate STAR+CHCNT-1,6
  596. End Proc
  597. Procedure CURSET
  598.    Flash 7,"(0f0,10)(fff,10)(f00,10)(fff,10)"
  599.    L1=%0
  600.    L2=%0
  601.    L3=%0
  602.    L4=%0
  603.    L5=%0
  604.    L6=%0
  605.    L7=%10000001
  606.    L8=%11111111
  607.    Set Curs L1,L2,L3,L4,L5,L6,L7,L8
  608.    Curs Pen 7
  609.    Curs On 
  610.    Bell 50
  611. End Proc
  612. Procedure PLOPIT
  613.    If GOOD and TT<TLL
  614.       Print K$;
  615.       A$(CHCNT)=K$
  616.       If K$=" "
  617.          LASPC=CHCNT
  618.       End If 
  619.       If CHCNT=>EOT
  620.          TEXL[K$]
  621.          TT=TT+T1
  622.          If TT>TLL-60
  623.             Bell 70-BEOH
  624.             Add BEOH,1,10 To 65
  625.          End If 
  626.          If TT=>TLL
  627.             Boom : Wait 5
  628.             Curs Off 
  629.             Locate STAR+LASPC,6
  630.             If LASPC>0
  631.                Cline EOT
  632.                Locate STAR,6
  633.                For N=1 To LASPC
  634.                   Print A$(N);
  635.                Next N
  636.                For N=LASPC To EOT : A$(N)=" " : Next N
  637.                EOT=LASPC
  638.                TT=0
  639.                For N=1 To EOT
  640.                   TEXL[A$(N)]
  641.                   TT=TT+T1
  642.                Next N
  643.             End If 
  644.             CHCNT=0
  645.             Locate STAR,6
  646.             Bell 20
  647.          End If 
  648.       End If 
  649.       K$=""
  650.       Inc CHCNT
  651.       Curs On 
  652.    End If 
  653. End Proc
  654. Procedure SETUP
  655.    ED
  656.    CURSET
  657.    Screen 5
  658.    Limit Mouse 
  659.    Reserve Zone 12
  660.    Set Zone 1,16,24 To 50,39
  661.    Set Zone 2,456,25 To 500,40
  662.    Set Zone 3,528,24 To 572,40
  663.    Set Zone 4,14,88 To 232,99
  664.    Set Zone 5,16,107 To 230,119
  665.    Set Zone 6,180,69 To 202,77
  666.    Set Zone 7,210,69 To 230,77
  667.    Set Zone 8,510,75 To 554,91
  668.    Set Zone 9,468,101 To 512,116
  669.    Set Zone 10,556,101 To 602,117
  670.    Set Zone 11,392,74 To 434,117
  671.    Set Zone 12,192,19 To 320,31
  672.    Pen 0
  673.    Ink 0
  674.    Paper 1
  675.    KLIPPERT
  676.    If TXP=0
  677.       EOT=0
  678.       LASPC=0
  679.       CHCNT=1
  680.       Locate STAR,6
  681.       For N=1 To 80 : A$(N)=" " : Next N
  682.       If EOT>0
  683.          Cline EOT
  684.       End If 
  685.       TXP=1
  686.    Else 
  687.       Locate STAR,6
  688.       For N=1 To EOT : Print A$(N); : Next N
  689.       Locate CHCNT,6
  690.    End If 
  691.    Locate STAR,6
  692.    SCUP=0
  693.    FRD=0
  694. End Proc
  695. Procedure OFFWEGO
  696.    Close Workbench 
  697.    Close Editor 
  698.    Voice 15
  699.    Volume 20
  700.    Mvolume 63
  701.    Music 1
  702.    Sample 1 To 15
  703.    'Load Iff "tit.iff",0
  704.    'Spack 0 To 10 
  705.    'Stop  
  706.    Unpack 10 To 1
  707.    Unpack 10 To 0
  708.    Get Palette 0
  709.    Flash Off : Curs Off 
  710.    Locate ,20
  711.    Centre "Setting the fonts - please wait"
  712.    Wait 5
  713.    BEL=10
  714.    MUS=1
  715.    CM=1
  716.    SA=1
  717.    STAR=10
  718.    PCNT=0
  719.    TED=0
  720.    TXP=0
  721.    Get Fonts 
  722.    '  Cls 
  723.    '  For N=1 To 20 
  724.    ' Print N;" ";Font$(N) 
  725.    'Next N
  726.    'Stop  
  727.    Set Font 3
  728.    Set Font 4
  729.    Set Font 5
  730.    Set Font 6
  731.    Set Font 7
  732.    Set Font 8
  733.    Set Font 9
  734.    Set Font 10
  735.    ''Stop   
  736.    Get Rom Fonts 
  737.    '
  738.    Set Font 2
  739.    Bank To Menu 9
  740.    Set Font 2
  741.    Pen 0
  742.    Locate ,20
  743.    Centre "Click the      mouse button to start."
  744.    Pen 2 : Locate 31, : Print "LEFT"
  745.    Locate ,22
  746.    Pen 0
  747.    Centre "Click the       mouse button to read/print the docs."
  748.    Pen 2 : Locate 24, : Print "RIGHT" : Pen 0
  749.    On Menu Proc MUS,CUL,FL,PGE,TEX,EX,DIS,EXT
  750.    Flash 2,"(f00,23)(0f0,23)(00f,23)(fc1,23)"
  751.    Repeat : MK=Mouse Key : Until MK<>0
  752.    Locate ,20 : Cline : Locate ,22 : Cline 
  753.    If MK=2 Then DUCKS
  754.    '    Screen 1 : Cls  
  755.    '   Screen 0 : Cls 
  756.    SEF=5
  757.    '   If Not Exist("DF0:books")
  758.    '      Mkdir "df0:books" 
  759.    '   End If 
  760.          Dir$="df0:books"
  761.          Set Dir 8,"*.dat"
  762.    Flash Off 
  763.    Colour 2,$F00
  764.    Menu On 
  765.    On Menu On 
  766. End Proc
  767. Procedure PASTE
  768.    Screen 0
  769.    Ink 0
  770.    Set Font SEF
  771.    Z$=""
  772.    For N=1 To 80
  773.       Z$=Z$+A$(N)
  774.    Next N
  775.    Text LIX,LIY,Z$
  776.    Screen Copy 0 To 1
  777.    If LCNT=TLN
  778.       LCNT=1 : LIY=SLIY
  779.    Else 
  780.       LIY=LIY+24
  781.       Inc LCNT
  782.    End If 
  783.    Screen 5 : UPLINE : Screen 0
  784.    BUMP:
  785.    Set Font 2
  786.    Screen 5
  787. End Proc
  788. Procedure MOVTXSC
  789.    SCUP=-1
  790.    Wait Vbl 
  791.    Screen Display 5,,175,,
  792.    For N=175 To 15 Step -1
  793.       Screen Display 5,,N,,
  794.       If N/2=Int(N/2)
  795.          Wait Vbl 
  796.       End If 
  797.    Next N
  798.    Wait Vbl 
  799.    If Not FRD
  800.       FOURD
  801.       FRD=-1
  802.    End If 
  803.    Screen 5
  804.    Limit Mouse 
  805. End Proc
  806. Procedure KLIPPERT
  807.    Screen 0
  808.    Clip 
  809.    ' for text 
  810.    If PSEL=1 Then Clip 5,5 To 635,250 : PTX=5 : PTY=5 : PBX=635 : PBY=250
  811.    If PSEL=2 Then Clip 5,5 To 305,250 : PTX=5 : PTY=5 : PBX=305 : PBY=250
  812.    If PSEL=3 Then Clip 5,150 To 635,250 : PTX=5 : PTY=150 : PBX=635 : PBY=250
  813.    If PSEL=4 Then Clip 5,225 To 635,250 : PTX=5 : PTY=225 : PBX=635 : PBY=250
  814.    Screen 5
  815. End Proc
  816. Procedure KLIPPERG
  817.    Screen 0
  818.    Clip 
  819.    'for graphics
  820.    If PSEL=1 Then Clip 1,1 To 2,2 : PTX=1 : PTY=1 : PBX=2 : PBY=2
  821.    If PSEL=2 Then Clip 315,5 To 635,250 : PTX=315 : PTY=5 : PBX=635 : PBY=250
  822.    If PSEL=3 Then Clip 5,5 To 635,135 : PTX=5 : PTY=5 : PBX=635 : PBY=135
  823.    If PSEL=4 Then Clip 5,5 To 635,230 : PTX=5 : PTY=5 : PBX=635 : PBY=230
  824.    Screen 4
  825. End Proc
  826. Procedure DUN
  827.    FOURD
  828.    On Menu Off 
  829.    Menu Off 
  830.    Repeat : Until Mouse Click
  831.    FOURUP
  832.    Menu On 
  833.    On Menu On 
  834. End Proc
  835. Procedure FOURUP
  836.    N=300
  837.    If Rnd(5)=1
  838.       MESS[Space$(36)]
  839.       MESS[" Peek-A-Boo! "]
  840.    Else 
  841.       MESS[Space$(36)]
  842.       MESS["Hello again!"]
  843.    End If 
  844.    Wait Vbl 
  845.    Screen Display 4,,N,,
  846.    Curs Off 
  847.    For N=300 To 250 Step -1
  848.       Screen Display 4,,N,,
  849.       If N/2=Int(N/2) Then Wait Vbl 
  850.    Next N
  851.    SCRPOS=250
  852.    Wait Vbl 
  853.    FRD=0
  854. End Proc
  855. Procedure UPLINE
  856.    CL$=Str$(LCNT)
  857.    If LCNT<10 Then CL$=Right$(CL$,1) : CL$="0"+CL$
  858.    If LCNT=10 Then CL$=Right$(CL$,2)
  859.    If LCNT<=TLN
  860.       Ink 3,6
  861.       Text 155,75,CL$
  862.       Bell 5*LCNT+5
  863.    Else 
  864.       Bell 20
  865.       LCNT=1 : LIY=SLIY
  866.    End If 
  867.    Pen 0 : Paper 1
  868.    Locate STAR+CHCNT-1,6
  869. End Proc
  870. Procedure DWNLINE
  871.    CL$=Str$(LCNT)
  872.    If LCNT<10 Then CL$=Right$(CL$,1) : CL$="0"+CL$
  873.    If LCNT=10 Then CL$=Right$(CL$,2)
  874.    If LCNT<TLN+1
  875.       Ink 3,6
  876.       Text 155,75,CL$
  877.       Bell 5*LCNT+5
  878.    Else 
  879.       Bell 20
  880.    End If 
  881.    Pen 0 : Paper 1
  882.    Locate STAR+CHCNT-1,6
  883. End Proc
  884. Procedure MOVTXSCD
  885.    SCUP=0
  886.    Wait Vbl 
  887.    For N=15 To 175
  888.       Screen Display 5,,N,,
  889.       If N/2=Int(N/2)
  890.          Wait Vbl 
  891.       End If 
  892.    Next N
  893.    Wait Vbl 
  894.    Screen 5
  895.    Limit Mouse 
  896. End Proc
  897. Procedure EXEC[C$]
  898.    '
  899.    ' Open a input/output null channel 
  900.    A$="NIL:"+Chr$(0)
  901.    Dreg(1)=Varptr(A$) : Dreg(2)=1004
  902.    HAND=Doscall(-30)
  903.    '
  904.    If HAND
  905.       '
  906.       ' Send the command to AmigaDos 
  907.       C$=C$+Chr$(0)
  908.       Dreg(1)=Varptr(C$) : Dreg(2)=HAND : Dreg(3)=HAND
  909.       F=Doscall(-222)
  910.       '
  911.       ' Close the channel
  912.       Dreg(1)=HAND
  913.       A=Doscall(-36)
  914.    End If 
  915.    '
  916.    ' -1 if ok 
  917. End Proc[F]
  918. Procedure SAVY
  919.    F$=Dir$
  920.    If Right$(F$,6)="books/" Then SETTIT
  921.    If Not CHANGED
  922.       Inc PCNT
  923.    End If 
  924.    PAGE$="Page"+Str$(PCNT)
  925.    F$=Fsel$("",PAGE$,"Press return to save as new page","Or click on other page to replace this")
  926.    If F$<>""
  927.       Inc TP
  928.       If Not Exist("df0:doc")
  929.          BOMB
  930.       End If 
  931.       If TP=>4
  932.          BOMB
  933.       End If 
  934.       P=1
  935.       If PCNT>9
  936.          P=2
  937.       End If 
  938.       PAGE$=Right$(F$,P)
  939.       PCNT=Val(PAGE$)
  940.       PAGE$="Page "+PAGE$
  941.       Change Mouse 3
  942.       MESS[Space$(36)]
  943.       MESS["Saving this page - please wait."]
  944.       Screen 0
  945.       Save Iff F$
  946.       P1$=Str$(PCNT) : P2$=Str$(PSEL) : P3$=Str$(LCNT) : P4$=Str$(TP)
  947.       Open Out 1,PAGE$+".dat"
  948.       Print #1,P1$
  949.       Print #1,P2$
  950.       Print #1,P3$
  951.       Print #1,P4$
  952.       Close 1
  953.       MESS[Space$(36)]
  954.       MESS["Please select a tool or menu item."]
  955.       Change Mouse CM
  956.    End If 
  957.    On Menu On 
  958.    CHANGED=0
  959. End Proc
  960. Procedure LOUD
  961.    F1$=Dir$
  962.    If Right$(F1$,6)="books/" Then SETTIT
  963.    If F$<>""
  964.       F$=Fsel$("","","Double Click on the page required","")
  965.       Change Mouse 3
  966.       P=1
  967.       If PCNT>9
  968.          P=2
  969.       End If 
  970.       PAGE$=Right$(F$,P)
  971.       PCNT=Val(PAGE$)
  972.       PAGE$="Page "+PAGE$
  973.       MESS[Space$(36)]
  974.       MESS["Setting up new page - please wait."]
  975.       Open In 1,PAGE$+".dat"
  976.       Line Input #1,P1$
  977.       Line Input #1,P2$
  978.       Line Input #1,P3$
  979.       Line Input #1,P4$
  980.       Close 1
  981.       PCNT=Val(P1$) : PSEL=Val(P2$) : LCNT=Val(P3$) : TP=Val(P4$)
  982.       If TP>4
  983.          BOMB
  984.       End If 
  985.       Load Iff F$,0
  986.       SETPAGE
  987.       Screen Copy 0 To 1
  988.       Screen 0 : Screen To Back : Screen 1 : Screen To Back 
  989.       MESS[Space$(36)]
  990.       MESS["Please select a tool or menu item."]
  991.       Change Mouse CM
  992.    End If 
  993.    On Menu On 
  994.    CHANGED=-1
  995. End Proc
  996. Procedure DIS
  997.    If Choice(2)=1 Then SAVY
  998.    If Choice(2)=2 Then LOUD
  999.    If Choice(2)=3 Then SETTIT
  1000.    If Choice(2)=4 Then DELP
  1001.    If Choice(2)=5 Then DELB
  1002. End Proc
  1003. Procedure SETTIT
  1004.    MESS[Space$(36)]
  1005.    Locate 24,2
  1006.    MESS["Enter your book's title: [           ]"]
  1007.    GITIT
  1008.    Curs Off 
  1009.    If F$<>""
  1010.       Dir$="df0:books/"
  1011.       TP=0
  1012.       Inc BC
  1013.       If Not Exist("df0:doc")
  1014.          BOMB
  1015.       End If 
  1016.       If BC=>3
  1017.          BOMB
  1018.       End If 
  1019.       MESS[Space$(38)]
  1020.       If Not Exist(F$)
  1021.          MESS["Setting up your new book"]
  1022.          Mkdir F$
  1023.       End If 
  1024.       MESS[Space$(38)]
  1025.       M$=F$+" is ready to use."
  1026.       MESS[M$]
  1027.       Dir$=F$
  1028.       CHANGED=-1
  1029.       PCNT=1
  1030.    Else 
  1031.       MESS[Space$(38)]
  1032.       MESS["Please select a tool or menu item."]
  1033.    End If 
  1034.    On Menu On 
  1035. End Proc
  1036. Procedure DELP
  1037. '   F$=Fsel$("","","Deleting","")
  1038. '   If F$<>""
  1039. '      Kill F$ 
  1040. '   End If 
  1041. '   On Menu On 
  1042. BOMB
  1043. End Proc
  1044. Procedure DELB
  1045.    BOMB
  1046. End Proc
  1047. Procedure TEXL[X$]
  1048.    Set Font SEF
  1049.    T1=Text Length(X$)
  1050.    Set Font 2
  1051. End Proc
  1052. Procedure CLTEX
  1053.    Locate STAR,6 : If EOT>0 Then Cline EOT
  1054.    CHCNT=1
  1055.    EOT=0
  1056.    BEOH=10
  1057.    TT=0
  1058.    LASPC=0
  1059.    For N=1 To 80 : A$(N)=" " : Next N
  1060. End Proc
  1061. Procedure GITIT
  1062.    Locate 50,2
  1063.    F$=""
  1064.    N=0
  1065.    Curs On 
  1066.    Bell 50
  1067.    Repeat 
  1068.       A$=Inkey$
  1069.       A=Asc(A$)
  1070.       If A>31 and A<128
  1071.          F$=F$+A$
  1072.          Print A$;
  1073.          N=N+1
  1074.       End If 
  1075.       If A=8 or N=11
  1076.          F$=""
  1077.          N=0
  1078.          Locate 50,2
  1079.          Cline 11
  1080.          Bell 50
  1081.       End If 
  1082.    Until A$=Chr$(13)
  1083.    Curs Off 
  1084. End Proc
  1085. Procedure DUCKS
  1086. '
  1087. Amos To Back 
  1088. EXEC["ppmore doc"]
  1089. Amos To Front 
  1090. '
  1091. End Proc
  1092. Procedure BOMB
  1093.    Menu Off 
  1094.    On Menu Off 
  1095.    Hide 
  1096.    Break Off 
  1097.    Mvolume 60
  1098.    Music 1
  1099.    Unpack 14 To 5
  1100.    Get Palette 5
  1101.    Flash 0,"(fff,23)(f00,23)(0f0,23)(00f,23)(fc1,23)"
  1102.    Colour 6,0
  1103.    Screen Display 5,,100,,
  1104.    Do : 
  1105. Loop 
  1106. End Proc